// pages/cart/cart.js
import {
  getCartListApi,
  updateCartIsCheckedApi,
  setAllCheckedApi,
  setCartCountApi,
  delCartApi,
} from "../../api/shopcart";
import { debounce, throttle } from "../../utils/tools";

const app = getApp();

Page({
  /**
   * 页面的初始数据
   */
  data: {
    hasLogin: false,
    cartList: [],
    totalPrice: 0, // 总价
    totalNum: 0, // 总数量
    isAllChecked: false, // 全选
  },

  // 不涉及到用户界面更新的数据，可以绑定到对象上
  isUpdating: false,

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {},

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (app.globalData.hasLogin) {
      this.setData({
        hasLogin: true,
      });
      // 登录了，才能获取购物车列表
      this.getCartList();
    } else {
      this.setData({
        hasLogin: false,
      });
    }
  },
  // 获取购物车列表
  async getCartList() {
    const cartList = await getCartListApi();
    this.setData({
      cartList,
    });
    this.computedTotalPrice();
    this.computedTotalNum();
    this.computedIsAllChecked();
  },
  // 单选
  updateCartIsChecked: throttle(async function (e) {
    // 开关控制
    if (this.isUpdating) return;
    this.isUpdating = true;
    const goodsId = e.currentTarget.dataset.goodsid; // 自定义属性都会转小写
    const isChecked = e.detail ? 1 : 0;
    // 发送请求，更新服务器数据
    await updateCartIsCheckedApi(goodsId, isChecked);
    // 发送请求，获取最新的购物车列表
    await this.getCartList();
    this.isUpdating = false;
  }, 1000),
  // 计算总价
  computedTotalPrice() {
    const totalPrice = this.data.cartList.reduce((p, c) => {
      return p + (c.isChecked ? c.price * c.count : 0);
    }, 0);
    this.setData({
      totalPrice,
    });
  },
  // 计算总数量
  computedTotalNum() {
    const totalNum = this.data.cartList.reduce((p, c) => {
      return p + (c.isChecked ? c.count : 0);
    }, 0);
    this.setData({
      totalNum,
    });
  },
  // 计算是否全选
  computedIsAllChecked() {
    const isAllChecked =
      this.data.cartList.length &&
      this.data.cartList.every((cart) => cart.isChecked);
    this.setData({
      isAllChecked,
    });
  },
  // 点击全选
  setAllChecked: throttle(async function (e) {
    const isAllChecked = e.detail ? 1 : 0;
    await setAllCheckedApi(isAllChecked);
    this.getCartList();
  }, 1000),
  // 设置商品数量
  setCartCount: debounce(async function (e) {
    const { goodsid, count } = e.currentTarget.dataset;
    const newCount = e.detail - count; // 新值 - 旧值
    await setCartCountApi(goodsid, newCount);
    this.getCartList();
  }, 1000),
  // 删除
  delCart(e) {
    const { goodsid, name } = e.currentTarget.dataset;
    wx.showModal({
      title: "确认删除",
      content: name,
      success: async (res) => {
        // 不管点确定还是取消按钮，都会进入success回调
        if (res.confirm) {
          // 点击确定
          await delCartApi(goodsid);
          this.getCartList();
        }
      },
    });
  },
  goOrderDetail() {
    if (this.data.totalNum === 0) return;
    wx.navigateTo({
      url: "/pages/order/detail/detail",
    });
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
});
